﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Framework.ContentWorkflow
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }

    //public class NewsPlugin : Framework.IContentComponentPlugin
    //{

    //    public ICMSHost CMSHost
    //    {
    //        get;
    //        set;
    //    }

    //    #region ICMSPlugin Members

    //    public void Application_Start(object application, EventArgs e)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public void Application_End(object application, EventArgs e)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public bool CanHandleRoute(object route)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public void MenuItems_Load(object sender, EventArgs e)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    #endregion

    //    #region IComponentApprovable Members

    //    public bool CheckPermission(PermissionContext permissionContext)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    #endregion
    //}

    //public class NewsPage : Framework.ContentComponentPluginPage
    //{
    //    public NewsPlugin NewsPlugin
    //    {
    //        get
    //        {
    //            return (NewsPlugin)Plugin;
    //        }
    //        set
    //        {
    //            Plugin = value;
    //        }
    //    }

    //    public void Approve()
    //    {
    //        // using(var context = new ObjectContext())
    //        //{
    //        //  IApproveCircleService approveService = NewsPlugin.CMSHost.GetService<IApproveCircleService>(context);
    //        //  var approveContext = new ApproveContext();
    //        //  approveService.Approve(approveContext,callback);
    //        //}
    //        // 
    //        // May pass a parameter such as Contenxt; 
    //    }
    //}

    //public interface IApprovableModel
    //{
    //    Int64 ItemID { get; set; }

    //    bool IsLive { get; set; }
    //}

    //public abstract class CMSApprovablePluginService<T>
    //   where T:IApprovableModel
    //{
    //    public void Revision(T model)
    //    {
    //        model.ItemID = 1;
    //        model.IsLive = false;
    //        //Save Model.
    //        //Copy the first
    //    }
    //}

    //public class CMSApproveService : IApproveCircleService
    //{
    //    #region IApproveCircleService Members

    //    public bool CheckPermission(PermissionContext permissionContext)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public bool Approve(ApproveContext approveContext)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public bool Approve(ApproveContext approveContext, Action<ApproveResult> callBack)
    //    {
    //        // Check Permission

    //        // 

    //        // Approve End
    //        var approveResult =new ApproveResult();
    //        if (callBack != null)
    //        {
    //            callBack(approveResult);
    //        }
    //        return false;
    //    }

    //    public bool ExpressApprove(ApproveContext approveContext)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    #endregion
    //}


    //public class actionContext
    //{
    //    public bool IsHandled
    //    {
    //        get;
    //        set;
    //    }

    //    public bool Canceled
    //    {
    //        get;
    //        set;
    //    }

    //    public Exception Exception
    //    {
    //        get;
    //        set;
    //    }
         
    //}

    //public interface IActionHandler
    //{
    //    int Order
    //    {
    //        get;
    //        set;
    //    }

    //    bool CanActionBeHandled(actionContext actionContext);

    //    void Handle(actionContext actionContext);
    //}

    //public interface IActionHandleManager
    //{
    //    IList<IActionHandler> GetAllActionHandlers<ICMSService>();

    //    void Handle(actionContext actionContext);
    //}

    //public class ActionHandleManager : IActionHandleManager 
    //{
    //    public IList<IActionHandler> GetAllActionHandlers<ICMSService>()
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public void Handle(actionContext actionContext)
    //    {
    //        IList<IActionHandler> allActionHandlers = GetAllActionHandlers<ICMSService>().OrderBy(ah => ah.Order).ToList();
    //        for (int i = 0; i < allActionHandlers.Count; i++)
    //        {
    //            if (!allActionHandlers[i].CanActionBeHandled(actionContext))
    //            {
    //                return;
    //            }
    //        }

    //        // Modify Item

    //        for (int i = allActionHandlers.Count - 1; i >= 0; i--)
    //        {
    //            allActionHandlers[i].Handle(actionContext);
    //        }

    //        // Modify content
    //    }
    //}
}
